package com.sskj.mine.http;

import com.lzy.okgo.request.GetRequest;
import com.lzy.okgo.request.PostRequest;
import com.lzy.okgo.request.base.Request;
import com.sskj.common.base.HttpData;
import com.sskj.lib.bean.UserData;
import com.sskj.mine.bean.AgentDataBean;
import com.sskj.mine.bean.AssetBean;
import com.sskj.mine.bean.ClientBean;
import com.sskj.mine.bean.CoinFeeBean;
import com.sskj.mine.bean.CommissionBean;
import com.sskj.mine.bean.FbShop;
import com.sskj.mine.bean.MineAboutUsBean;
import com.sskj.mine.bean.MineGoogleBean;
import com.sskj.mine.bean.MineNoticeList;
import com.sskj.mine.bean.OtherRecordBean;
import com.sskj.mine.bean.PageBean;
import com.sskj.mine.bean.PayWayBean;
import com.sskj.mine.bean.QRCodeBean;
import com.sskj.mine.bean.RechargeInfoBean;
import com.sskj.mine.bean.RechargeListBean;
import com.sskj.mine.bean.SysBean;
import com.sskj.mine.bean.UserAgreeMent;
import com.tencent.bugly.crashreport.biz.UserInfoBean;
import com.sskj.mine.bean.VerificationBean;

import java.io.File;
import java.util.List;
import java.util.Map;


/**
 * 作者 :吕志豪
 * 简书：https://www.jianshu.com/u/6e525b929aac
 * github：https://github.com/lvzhihao100
 * 描述：
 * 创建时间：2018-10-15 14:08
 */
public interface IHttpService {


    /**
     * 手机号注册
     *
     * @param account        手机号
     * @param pswd           密码
     * @param code           验证码
     * @param invitationCode 邀请码
     * @return
     */
    PostRequest<HttpData> register(String account, String pswd, String code, String invitationCode);


    /**
     * 获取短信验证码---codeType 1代表注册  2代表重置密码
     *
     * @param mobile   手机号
     * @param type
     * @param codeType
     * @param account  账号
     * @return
     */
    GetRequest<HttpData> sendCode(String mobile, String type, String codeType, String account);

    /**
     * 绑定谷歌
     */
    PostRequest<HttpData> bindChrome(String qrcode, String secret, String code, String stockUserId, String telCode);


    /**
     * 登录
     *
     * @param pswd    密码
     * @param account 账号
     * @return
     */
    PostRequest<HttpData<UserData>> login(String account, String pswd);


    /**
     * 邮箱注册
     *
     * @param email          邮箱号
     * @param pswd           密码
     * @param code           验证码
     * @param invitationCode 邀请码
     * @return
     */
    PostRequest<HttpData> registerEmail(String email, String pswd, String code, String invitationCode);


    /**
     * 获取邮箱验证码---codeType 1代表注册  2代表重置密码
     *
     * @param email 邮箱号
     * @return
     */
    PostRequest<HttpData> sendEmailCode(String email);


    /**
     * 获取注册协议
     *
     * @return
     */
    GetRequest<HttpData<UserAgreeMent>> getXieyi();


    /**
     * 邮箱号重置密码
     *
     * @param code  验证码
     * @param pswd  新密码
     * @param email 账号
     * @return
     */
    PostRequest<HttpData> resetPwdWithEmail(String code, String pswd, String email);


    /**
     * 手机号重置密码
     *
     * @param code    验证码
     * @param pswd    新密码
     * @param account 账号
     * @return
     */
    PostRequest<HttpData> resetPwd(String code, String pswd, String account);


    /**
     * 设置支付密码
     *
     * @param code     验证码
     * @param tradePwd 支付密码
     * @return
     */
    PostRequest<HttpData> setPayPwd(String code, String tradePwd, String mobile);


    /**
     * 上传图片
     *
     * @param file 文件
     * @return
     */
    PostRequest<HttpData<String>> uploadImg(File file);


    /**
     * 绑定邮箱
     *
     * @param code  验证码
     * @param email 邮箱号
     * @return
     */
    PostRequest<HttpData> bindEmail(String code, String email);


    /**
     * 实名认证
     *
     * @param username       用户名
     * @param idCardNo       身份证号
     * @param idCardFrontImg 前身份证
     * @param idCardBackImg  后身份证
     * @param selfieImg      手持
     * @return
     */
    PostRequest<HttpData> verify(String username, String idCardNo, String idCardFrontImg, String idCardBackImg, String selfieImg);


    /**
     * 获取资产列表
     *
     * @return
     */
    PostRequest<HttpData<List<AssetBean>>> getAssets();


    /**
     * 获取提现手续费
     *
     * @param code 币种码
     * @return
     */
    PostRequest<HttpData<CoinFeeBean>> getWithdrawFee(String code);


    /**
     * 充值
     *
     * @param code 币种码
     * @param type 类型 ETH 1，BTC 2，BCH 3
     * @return
     */
    PostRequest<HttpData<RechargeInfoBean>> recharge(String code, String type);


    /**
     * 提现
     *
     * @param code       验证码
     * @param tradePwd   交易密码
     * @param usdFee     金额
     * @param walletAddr 钱包地址
     * @param stockCode  币种码
     * @return
     */
    PostRequest<HttpData> withdraw(String code, String tradePwd, String usdFee, String walletAddr, String stockCode);


    /**
     * 冲提币记录
     *
     * @return
     */
    GetRequest<HttpData<PageBean<RechargeListBean>>> getAssetRecord(int page, int pageSize, String type, String stockCode);

    /**
     * 其他记录
     *
     * @return
     */
    PostRequest<HttpData<PageBean<OtherRecordBean>>> getOtherRecord(int page, int pageSize, String stockCode);


    /**
     * 添加钱包地址
     *
     * @param type   类型 ETH 1，BTC 2，BCH 3
     * @param addr   钱包地址
     * @param code   币种码
     * @param remark 备注
     * @return
     */
    PostRequest<HttpData> addWalletAddress(String type, String addr, String code, String remark);


    /**
     * 获取钱包列表
     *
     * @return
     */
    GetRequest<Map> getWalletList();


    /**
     * 删除钱包地址
     *
     * @param id 钱包地址Id
     * @return
     */
    PostRequest<HttpData> delWalletAddress(String id);

    GetRequest<HttpData> changePwd(String account, String originPwd, String newPwd);

    PostRequest<HttpData> bindMobile(String mobile, String code);

    GetRequest<HttpData<List<SysBean>>> getSys(String type);

    // 联系我们
    GetRequest<HttpData<MineAboutUsBean>> getWebAboutUs();

    /**
     * 安全中心---支付列表
     */
    PostRequest<HttpData<List<PayWayBean>>> getPayType();

    PostRequest<HttpData> addPayWay(String payId, String payType, String tradePwd, String wxAccount, String wxImg, String alipayAccount, String aliImg, String bankCardNo, String bankCardOpenBank, String bankCardType);

    /**
     * 安全中心---申请成为商家
     */
    PostRequest<HttpData> applyShop(String status);

    PostRequest<HttpData> togglePayType(String id, boolean status);

    /**
     * 绑定谷歌
     */
    PostRequest<HttpData<MineGoogleBean>> bindGoogle(String id);

    /**
     * 安全中心---成为商家所要冻结保证金
     */
    PostRequest<HttpData<List<FbShop>>> moneyUsed(String name, String type);

    /**
     * 验证手机号 邮箱
     */
    PostRequest<HttpData> unBindMobile(String mobile, String code);

    PostRequest<HttpData> applyAgent(String name, String phone);

    GetRequest<HttpData<AgentDataBean>> getAgentData();

    GetRequest<HttpData<QRCodeBean>> getSpreadCode(String userId);

    GetRequest<HttpData<PageBean<CommissionBean>>> getCommission(int page);

    GetRequest<HttpData<PageBean<ClientBean>>> getClient(int page);

    // 获取用户个人信息
    GetRequest<HttpData<UserData>> getUserInfo(String id);


    /**
     * Google验证登录
     *
     * @param code        随机验证码
     * @param stockUserId 当前登录用户ID
     * @return
     */
    GetRequest<HttpData> googleAuthVerify(String code, String stockUserId);


    //初级实名认证
    PostRequest<HttpData<VerificationBean>> verificationJunior(String id, String username, String idCardNo);

    // 设置商家昵称
    GetRequest<HttpData> setShopName(String id, String nickname);
    // 设置头像
    GetRequest<HttpData> setMineTxName(String id, String headUrl);
    // 开启谷歌认证
    GetRequest<HttpData> openChrome(String id,String code);
    // 关闭谷歌认证
    GetRequest<HttpData> closeChrome(String id,String code,String telCode);

    /**
     * 公告列表
     */
    PostRequest<HttpData<com.sskj.lib.bean.PageBean<MineNoticeList>>> getGGList(String page, String pageSize);
}